'use strict';

import { Service } from 'egg';

export default class AdminService extends Service{
    /**
     * 查询一个管理员
     * 参数：
     *  condition 检索条件
     * 输出：
     *   {Number} code 返回状态码 0失败  200成功
     *   {String} message 返回状态对应提示消息
     *   {Object} data 数据主体结构
     *   {Number} data.admin_id 用户ID
     *   {String} data.user_name 用户名
     *   {String} data.token jwt认证token
     *   {String} data.real_name 用户密码
     *   {String} data.about_name 公司名称
     * 过程：
     *  根据检索天降查询管理员信息
     *   验证是否为登录操作，如果是生成token，如果不是则直接返回结果
     */
    async find_one(condition){
        const {ctx,app}=this;
        try {
            let admin=await ctx.service.common.find_one(condition,"Admin","admin_id");
            
            if(admin&&admin['admin_id']){
                if(condition['user_name']&&condition['password']){//说明是登录操作
                    admin['token']=await ctx.service.token.sign_jwt(admin,'admin_id');
                }
                let about=await app.model.About.findOne();    
                return ctx.helper.success_result("操作成功",{
                    ...admin,
                    about_id:about?about['about_id']:'',
                    about_name:about?about['about_name']:''
                })
            }
            return ctx.helper.error_result(condition['user_name']&&condition['password'] ? '账号密码错误':"未找到数据");
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
        
    }
    /**
     * 分页查询所有管理员
     * 参数：
     *  condition 检索条件
     * 输出：
     *   {Number} code 返回状态码 0失败  200成功
     *   {String} message 返回状态对应提示消息
     *   {Object} data 查询结果数据结构
     *   {Object[]} data.data_info 管理员列表
     *   {Number} data.data_info.admin_id 管理员ID
     *   {String} data.data_info.user_name 管理员用户名
     *   {String} data.data_info.real_name 管理员真实名称
     *   {String} data.page_count 页码总数
     *   {String} data.data_count 数据总数
     * 过程：
     *  构建分页查询条件
     *  分页查询数据，分页结果处理逻辑，返回结果
     */
    async find_and_count_all(condition,order_condition,page){
        const {ctx,app}=this;
        try {
            let page_param=ctx.helper.page_param(page);
            let admins=await app.model.Admin.findAndCountAll({
                where:condition,
                order:order_condition,
                limit:page_param.page_size,
                offset:page_param.offset
            });
            return ctx.helper.success_result("操作成功",ctx.helper.page_result(admins,page_param.page_size))
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
    /**
     * 查询所有管理员
     * 参数：
     *  condition 检索条件
     * 输出：
     *   {Number} code 返回状态码 0失败  200成功
     *   {String} message 返回状态对应提示消息
     *   {Object} data 查询结果数据结构
     *   {Object[]} data.data_info 管理员列表
     *   {Number} data.data_info.admin_id 管理员ID
     *   {String} data.data_info.user_name 管理员用户名
     *   {String} data.data_info.real_name 管理员真实名称
     *   {String} data.page_count 页码总数
     *   {String} data.data_count 数据总数
     * 过程：
     *  检索条件和排序条件查询所有管理员
     */
    async find_all(condition,order_condition){
        const {ctx,app}=this;
        try {
            
            let admins=await app.model.Admin.findAll({
                where:condition,
                order:order_condition,
            });
            return ctx.helper.success_result("操作成功",admins);
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
}